LlamaIndex(GPT Index)にDevelopersIOの記事を100件読み込ませて質問してみた
吉川@広島です。
本家ChatGPTとは違う、オリジナル知識を持ったChatGPTを作るにはどうしたら良いか調べていたところLlama IndexやLangChainを知りました。
そこで、LlamaIndexを使ってDevelopersIOブログを直近100記事ほど読み込ませ、本家ChatGPTとChatGPT+Llama Indexそれぞれに以下の質問をしてみました。
- 「DevelopersIOブログ内において、AWSに関する記事のURLを1つください。また、記事の要約を教えてください。」
本家ChatGPTに聞いた場合:
ChatGPT+Llama IndexにDevelopersIOブログを直近100記事ほど読み込ませた場合:
記事のURLは"https://dev.classmethod.jp/news/230316-aws-trouble-webinar/"です。記事の要約は、Amazon S3の運用において問題発生時の「問題の切り分け」「情報採取」「サポート問合せのコツ」をお伝えするウェビナーの紹介記事です。AWSを導入したばかりで運用方法を学びたい、問題発生時にすばやく対応できるように準備をしたい方におすすめとされています。
本家ChatGPTの方は存在しない記事を紹介したのに対し、Llama Indexを使った方は実際に存在するURL、そして正しいと評価できそうな要約を教えてくれました1。
Llama Index(GPT Index) とは
上記READMEをDeepL翻訳しつつ読みました。
現状はChatGPTやDavinciなどのLLM製品に与えられるコンテキスト(知識)のサイズに限界があるという課題があり、それに対する1つの解として開発されているOSSのようです。
ChatGPTに標準で組み込まれていない知識を与えた上で、
- 質疑応答
- まとめ
- テキスト生成(ストーリー、TODO、メールなど)
などができるだろうと説明されています。
やってみた手順
環境
- macOS monterey(Intel)
- Python 3.8.3
- pip 23.0.1
- llama-index 0.4.21
インストール
pipでllama-indexをインストールします。
pip install llama-index
以下のようなエラーが発生しました。
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
WARNING: You are using pip version 20.2.4; however, version 23.0.1 is available. You should consider upgrading via the '/Users/{username}/.anyenv/envs/pyenv/versions/3.8.3/bin/python3.8 -m pip install --upgrade pip' command.
警告でpipのバージョンが古いと出ているので上げてみます。
pip install --upgrade pip
するとllama-indexのインストールが成功しました。
記事URL一覧を用意する
まず記事100件分のURLを用意します。今回はCSVファイルで用意しました。
URL1 URL2 URL3 以下省略...
Index作成コード
上述のCSVファイルを読み込み配列にします。そしてLlama Indexの GPTSimplePageReader
に配列URLで渡します。こうするだけでページ内容を読み込み、インデックスファイルを作成してくれます。
# create-index.py import csv from llama_index import GPTSimpleVectorIndex, SimpleWebPageReader from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor article_urls = [] with open('tmp/article-urls.csv') as f: reader = csv.reader(f) for row in reader: article_urls.append(row[0]) documents = SimpleWebPageReader().load_data(article_urls) index = GPTSimpleVectorIndex(documents=documents, llm_predictor=ChatGPTLLMPredictor() ) index.save_to_disk('tmp/index.json')
上記スクリプトを実行すると、
python create-index.py
再びエラーが出ました。
ModuleNotFoundError: No module named 'html2text'
html2text
を別途インストールする必要があったようです。
pip install html2text
再度実行し、6〜7分待つと完了しました。
Indexロード+クエリコード
続いて、インデックスをロードして質問してみます。
# query.py from llama_index import GPTSimpleVectorIndex from llama_index.langchain_helpers.chatgpt import ChatGPTLLMPredictor index = GPTSimpleVectorIndex.load_from_disk('tmp/index.json', llm_predictor=ChatGPTLLMPredictor()) answer = index.query("DevelopersIOブログ内において、AWSに関する記事のURLを1つください。また、記事の要約を教えてください。") print(answer)
python query.py
記事のURLは"https://dev.classmethod.jp/news/230316-aws-trouble-webinar/"です。記事の要約は、Amazon S3の運用において問題発生時の「問題の切り分け」「情報採取」「サポート問合せのコツ」をお伝えするウェビナーの紹介記事です。AWSを導入したばかりで運用方法を学びたい、問題発生時にすばやく対応できるように準備をしたい方におすすめとされています。
上記出力が得られました。
参考
- jerryjliu/gpt_index: LlamaIndex (GPT Index) is a project that provides a central interface to connect your LLM's with external data.
- Welcome to LlamaIndex ? (GPT Index)! — LlamaIndex documentation
- LlamaIndex で ChatGPT API を試す|npaka|note
- LlamaIndex クイックスタートガイド|npaka|note
- ChatGPTとLlamaIndex(GPT Index)を使った仕様問い合わせAIの作成
- LlamaIndex(GPT Index)を試す - dyoshikawa’s blog
- PythonでCSVファイルを読み込み・書き込み(入力・出力) | note.nkmk.me
- 正確にはブログ記事でなくニュースなので、意図した出力とは若干ずれています。インデックスの作り方や質問文などを改善することで、より狙った情報をヒットさせられそうです。 ↩